package com.iot.ammeter.utils;

import com.iot.ammeter.dto.web.user.WebUserLoginInfoDTO;
import io.jsonwebtoken.Claims;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName: ClaimsUtil
 * @Author: Basil
 * @Date: 2021/10/15 下午2:30
 * @Version: 1.0
 * @Description: 将登录后的用户信息封装成map，用于生成token
 **/
public class ClaimsUtil {
    /**
     * web端用户id
     */
    private static final String WEBUSERID = "webUserId";
    /**
     * 角色id
     */
    private static final String ROLEID = "roleId";
    /**
     * 用户名
     */
    private static final String USERNAME = "userName";
    /**
     * 邮箱
     */
    private static final String EMAIL = "email";

    /**
     * 将web用户信息封装成map
     * @param webUserLoginInfoDTO web用户信息
     * @return map
     */
    public static Map<String,Object> webUserToClaims(WebUserLoginInfoDTO webUserLoginInfoDTO) {
        Map<String, Object> claims = new HashMap<>();
        claims.put(WEBUSERID, webUserLoginInfoDTO.getWebUserId());
        claims.put(ROLEID, webUserLoginInfoDTO.getRoleId());
        claims.put(USERNAME,webUserLoginInfoDTO.getUserName());
        claims.put(EMAIL,webUserLoginInfoDTO.getEmail());
        return claims;
    }

    /**
     * 解析web端用户信息
     * @param claims 载荷
     * @return WebUserLoginInfoDTO
     */
    public static WebUserLoginInfoDTO claimsToWebUserLoginInfo(Claims claims) {
        WebUserLoginInfoDTO webUserLoginInfoDTO = new WebUserLoginInfoDTO();
        webUserLoginInfoDTO.setWebUserId(String.valueOf(claims.get(WEBUSERID)));
        webUserLoginInfoDTO.setRoleId(String.valueOf(claims.get(ROLEID)));
        webUserLoginInfoDTO.setUserName(String.valueOf(claims.get(USERNAME)));
        webUserLoginInfoDTO.setEmail(String.valueOf(claims.get(EMAIL)));
        return webUserLoginInfoDTO;
    }
}
